package com.hyl.ssm.util;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;
import java.io.File;

/**
 * 文件上传工具类
 */
public class UploadUtil {
    /**
     * @param request   request对象
     * @param name      文件域名称
     * @param directory 上传文件的目录
     * @return 文件的上传路径
     */
    public static String upload(HttpServletRequest request, String name, String directory) {
        //上传文件的存储路径（服务器文件系统上的绝对文件路径）
        String uploadFilePath = request.getSession().getServletContext()
                .getRealPath(directory + "/");
        String path = "";
        try {
            //如果上传路径不存在，则新建目录
            File fileSaveDir = new File(uploadFilePath);
            if (!fileSaveDir.exists()) {
                fileSaveDir.mkdir();
            }
            //获取Part对象
            Part part = request.getPart(name);
            //提取文件名的后缀
            String fileName = extractFileName(part);
            fileName = System.currentTimeMillis() + "_" + fileName;
            //文件保存路径
            path = directory + "/" + fileName;
            //将文件写入指定目录
            part.write(uploadFilePath + File.separator + fileName);
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return path;
    }

    /**
     * 从HTTP header中提取上传文件的名称
     */
    private static String extractFileName(Part part) {
        String contentDisp = part.getHeader("content-disposition");
        String[] items = contentDisp.split(";");
        for (String s : items) {
            if (s.trim().startsWith("filename")) {
                return s.substring(s.indexOf("=") + 2, s.length() - 1);
            }
        }
        return "";
    }
}
